package xjay.ai.emotionalsupport.profile;

import jakarta.annotation.Resource;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.stereotype.Service;
import xjay.ai.emotionalsupport.chatmemory.ChatHistoryService;

import java.util.List;

@Service
public class TarotUserProfileService {

    @Resource(name = "qwenChatModel")
    private ChatModel qwenChatModel;

    @Resource
    private ChatHistoryService chatHistoryService;

    /**
     * 根据历史对话生成用户画像摘要
     * @param userId 用户ID
     * @param sessionId 会话ID
     * @return 用户画像摘要文本
     */
    public String generateUserProfile(String userId, String sessionId) {
        List<Message> historyMessages = chatHistoryService.contextMessages(userId, sessionId);
        
        if (historyMessages.isEmpty()) {
            return "新用户，尚无历史记录。";
        }

        // 构造用户画像提取提示词
        String profilePrompt = """
                请根据以下历史对话记录，提取并总结用户的关键信息，用于塔罗占卜师记住用户的基本情况。
                
                提取内容应包括：
                1. 个人基础信息（星座、年龄、职业等，如果提及）
                2. 历史占卜问题类型（学业、感情、事业等）
                3. 曾经给出的重要建议或指引
                4. 用户关心的核心问题领域
                5. 上次占卜的结果或建议
                
                输出格式：
                - 用简洁的条目形式总结，每条信息用"•"开头
                - 重点突出可以在后续对话中引用的信息
                - 如果信息不足，说明"信息有限"
                - 字数控制在150字以内
                
                示例格式：
                • 星座：天蝎座
                • 关注领域：主要咨询学业和感情问题  
                • 历史问题：曾问过"能否通过面试"、"感情是否顺利"
                • 上次建议：建议保持信心，多关注内心直觉
                • 特点：比较在意他人看法，需要鼓励
                """;

        // 将历史消息转换为字符串
        StringBuilder conversationText = new StringBuilder();
        for (Message message : historyMessages) {
            conversationText.append(message.getMessageType().getValue())
                    .append(": ")
                    .append(message.getText())
                    .append("\n");
        }

        // 调用AI生成用户画像
        String userProfile = qwenChatModel.call(profilePrompt + "\n\n历史对话：\n" + conversationText.toString());
        
        return userProfile;
    }

    /**
     * 根据用户问题快速检索历史相关信息
     * @param userId 用户ID
     * @param sessionId 会话ID
     * @param currentQuestion 当前问题
     * @return 相关历史信息
     */
    public String getRelevantHistory(String userId, String sessionId, String currentQuestion) {
        List<Message> historyMessages = chatHistoryService.contextMessages(userId, sessionId);
        
        if (historyMessages.isEmpty()) {
            return "";
        }

        String searchPrompt = """
                用户当前问题："%s"
                
                请从历史对话中找出与当前问题最相关的信息，包括：
                1. 类似问题的历史回答
                2. 相关的占卜建议
                3. 用户提及的相关背景信息
                
                如果没有相关信息，返回"无相关历史记录"。
                如果有相关信息，用简洁的方式总结，控制在100字以内。
                """.formatted(currentQuestion);

        StringBuilder conversationText = new StringBuilder();
        for (Message message : historyMessages) {
            conversationText.append(message.getMessageType().getValue())
                    .append(": ")
                    .append(message.getText())
                    .append("\n");
        }

        return qwenChatModel.call(searchPrompt + "\n\n历史对话：\n" + conversationText.toString());
    }
}